MaxCompute新推出增量物化视图功能(Delta Live Materialized View),帮助用户构建简单易用的增量更新Pipeline。本文为您介绍MaxCompute增量物化视图的相关操作。
功能介绍
MaxCompute的增量物化视图Delta Live MV功能,它具备以下几个特点:
声明式SQL。
增量全量一体化,统一的SQL、存储和计算。
自动增量刷新,自定义数据新鲜度。
通过级联增量物化视图,构建简单易用的增量更新Pipeline。
增量物化视图相比全量刷新物化视图,能够平衡数据新鲜度和计算代价,充分利用存量的计算结果,通过智能的增量计算算法,减少计算代价,并提高数据新鲜度。
前提条件
源表(source table)已开启CDC功能。目前支持的源表类型如下:
Delta Table增量表(详情请参见Delta Table概述),并且需要开启CDC功能。详情请参见建表DDL。
增量物化视图表。增量物化视图默认已开启CDC功能。
使用限制
增量物化视图不能包含非确定性计算,如RAND函数、UDF等。
当前增量物化视图支持的SQL算子包含:PROJECT、FILTER、AGGREGATE、JOIN。其中:
AGGREGATE当前仅支持以下常见函数:SUM、COUNT、AVG、MIN、MAX。
JOIN当前仅支持维表不发生数据变化的维表JOIN。
创建增量物化视图
CREATE MATERIALIZED VIEW [IF NOT EXISTS][<project_name>.]<mv_name>
[LIFECYCLE <days>] --指定生命周期
[BUILD DEFERRED] -- 指定是在创建时只生成表结构,不生成数据
[(<col_name> [COMMENT <col_comment>],...)] --列注释
[DISABLE REWRITE] --指定是否用于改写
[COMMENT 'table comment'] --表注释
[PARTITIONED ON/BY (<col_name> [, <col_name>, ...]) --创建物化视图表为分区表
[REFRESH EVERY xx MINUTES/HOURS/DAYS] -- 设置物化视图定时更新间隔
[TBLPROPERTIES(
"compressionstrategy"="normal/high/extreme", --指定表数据存储压缩策略
"enable_auto_refresh"="true", --指定是否开启自动刷新
"refresh_mode"="incremental", --指定刷新模式
"only_refresh_max_pt"="true", --针对分区物化视图,只自动刷新源表最新分区
"refresh_cron"="xx" --根据cron定时器,可以配置定时间隔更新或者定点更新,间隔定点更新等
)]
AS <select_statement>;
增量物化视图Delta Live MV的语法兼容主要普通物化视图的语法,目前存在以下差异:
当前不支持将增量物化视图创建为聚簇表。
增量物化视图不支持将
enable_auto_substitute
参数设置为true。增量物化视图是异步物化视图形态,所使用的base table数据不一定是最新版本,与enable_auto_substitute
设置为true时冲突。
示例:创建一个简单的增量物化视图。
CREATE materialized VIEW if NOT EXISTS mv1
refresh EVERY 5 minutes
tblproperties("enable_auto_refresh"="true", "refresh_mode"="incremental")
AS
SELECT name, COUNT(*) FROM source GROUP BY name;
上述SQL语法定义了一个名为mv1的增量物化视图,每5分钟自动进行一次增量刷新。其中source为一张开启CDC功能的Delta Table。
增量刷新模式
相比普通物化视图,您只需要增加以下属性参数,即可指定该物化视图为增量刷新模式或全量刷新模式。
"refresh_mode"="incremental"
目前MaxCompute物化视图支持如下两种刷新模式:
full:全量刷新,物化视图的默认刷新方式。
incremental:增量刷新。内置增量计算能力,只对增量变化的部分进行计算。
自动刷新频率
增量物化视图提供以下方式来控制刷新频率和数据新鲜度:
通过
REFRESH EVERY xx MINUTES/HOURS/DAYS
语法来指定刷新调度间隔,最小值为1分钟。refresh every 2 minutes
通过在TBLPROPERTIES中指定cron表达式来设置刷新频率,根据cron定时器,可以配置定时间隔更新、定点更新或间隔定点更新等。其中
refresh_cron
对应的参数是QUARTZ Cron格式的字符串,使用详情请参见Cron expression examples。TBLPROPERTIES( "enable_auto_refresh"="true", "refresh_cron"="xx" )
通常, 指定刷新周期和打开自动刷新("enable_auto_refresh"="true"
)一起配合使用。
管理和可观测
删除增量物化视图
DROP materialized VIEW [if EXISTS] [<project_name>.]<mv_name>
手动刷新增量物化视图
增量物化视图也提供手动刷新能力,语法和普通物化视图相同:
ALTER materialized VIEW [<project_name>.]<mv_name>
rebuild [PARTITION(<ds>=max_pt(<table_name>),<expression1>...)];
ds:指分区列。
关闭自动刷新
通过修改物化视图的TBLPROPERTIES参数,可以关闭自动刷新功能。命令如下:
ALTER MATERIALIZED VIEW mv SET TBLPROPERTIES("enable_auto_refresh"="false");
恢复自动刷新
通过修改物化视图的TBLPROPERTIES参数,可以打开或者恢复自动刷新。
ALTER MATERIALIZED VIEW mv SET TBLPROPERTIES("enable_auto_refresh"="true");
修改刷新频率
通过以下命令,可以修改增量物化视图的刷新频率。
ALTER MATERIALIZED VIEW mv
SET TBLPROPERTIES("enable_auto_refresh"="true", "refresh_interval_minutes"="xx");
refresh_interval_minutes参数最小取值为1,建议该值小于base table的CDC生命周期。
查看增量物化视图-数据变更历史
通过以下命令能查看增量物化视图数据变化的记录
show history for table incremental_mv;
//查询结果
ObjectType ObjectId ObjectName VERSION(LSN) Time Operation
TABLE d95ec7015e8b432e8e0092d01da962a9 incremental_mv 0000000000000001 2024-08-18 21:06:32 CREATE
TABLE d95ec7015e8b432e8e0092d01da962a9 incremental_mv 0000000000000002 2024-08-18 21:11:13 UPDATE
计费规则
增量物化视图包含存储和计算两部分费用。与普通物化视图操作计算存储计费方式一致。
计算费用
创建或刷新增量物化视图过程中,涉及到实际启动作业计算的,会消耗计算资源产生计算费用,其计费规则和普通SQL作业一致。
触发自动刷新功能时,若无实际增量数据变化,则不会启动SQL作业进行刷新操作,不产生费用。
建议将增量物化视图单独放在某个Project中,方便跟踪自动刷新的作业及其计算资源消耗和费用。
存储费用
增量物化视图和普通物化视图或者普通表一样,按照正常存储计量计费。
增量物化视图对某些operator可能会采取基于state的增量计算算法,会产生内部state table消耗一定的存储空间
增量物化视图需要增量CDC、Time Travel存储开销,这部分存储开销和普通Delta Table类似。